let a = {
  name: 'abcdefg',
  age: 9
}
let b = {
  //get,set,has,deletProperty是捕获器
  //Reflect.get，Reflect.set，Reflect.has，Reflect.deleteProperty是反射方法
  //获取
  get(target, property, receiver) {//目标，访问的属性，代理
    if (property == 'age') {
      return Reflect.get(...arguments) + '00'
    } else {
      return Reflect.get(...arguments).split('').reverse().join('');
    }
    //					let temp = ''
    //					if(property == 'age'){
    //						temp = '00'
    //					}
    //					return Reflect.get(...arguments) + temp;
  },
  //设置
  set(target, property, value, receiver) {
    console.log('ok')
    return Reflect.set(...arguments)
  },
  //查找有没有
  has(target, property) {
    return Reflect.has(...arguments)
  },
  //删除，不存在的属性也返回true，除非设置了不可配置
  deleteProperty(target, property) {
    return Reflect.deleteProperty(...arguments)
  }
}
let proxy1 = new Proxy(a, b);
console.log(proxy1.name);
console.log(proxy1.age);
//			
//			let {proxy,revoke} = Proxy.revocable(a,b);
//			console.log(proxy.name);
//			console.log(proxy.age);
//			revoke();
//			console.log(proxy.name);
//			console.log(proxy.age);

console.log('age' in proxy1);
delete proxy1.name

/* ------------------------------------------------------------- */

function update() {
  console.log('更新视图')
}
//数组
//Reflect设置和获取都变成函数行为
let arr = [1, 2, 3]
let proxy = new Proxy(arr, {
  set(target, key, value) {
    // 不要手动操作原数组，因为数组变化时 可能调用的是push方法 pop 这个时候key 就会出现问题
    if (key == 'length') return true;
    update();
    return Reflect.set(target, key, value)
  },
  get(target, key) {
    return Reflect.get(target, key)
  }
})
proxy.push(100)
console.log(proxy[0]);